iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
AI & Data

跟著文組生學數據分析系列 第 19

抓取資料庫數據 - SQL進階語法

  • 分享至 

  • xImage
  •  

今天終於來到SQL的進階篇!想要更加靈活的使用SQL,就必須要知道子查詢的用法,今天就讓我們來認識所謂的子查詢吧~

子查詢是什麼?

子查詢的意思其實就是在原本的查詢語句裡面再放上一個查詢語句,被放入的語句會使用(),用以區別outer query 和 inner query(subquery),而()內的就是子查詢。

子查詢可以在 SELECTINSERTUPDATEDELETE 語句中,同 =、<、>、>=、<=、IN等運算符一起使用。

由於我們都會是以查詢資料為主,因此今天就讓我們來學習以SELECT為主的子查詢用法。

與WHERE一起使用

第一個常用的方法是結合資料的條件篩選。

當我們想要抓出某欄位大於均值的資料時可以這樣寫:

SELECT 欄位名1, 欄位名2, 欄位名3
FROM 表名
WHERE 欄位名2 > (SELECT AVG(欄位名2)
                 FROM 表名);

還有一種用法可以來查詢兩表之間的條件篩選:

SELECT 欄位名1, 欄位名2, 欄位名3
FROM 表1
WHERE 欄位名2 IN (SELECT DISTINCT 欄位名2
                 FROM 表2);

這邊有一個新的用法DISTINCT,其用意是去重,讓我們可以確保每一個資料的不重複。

除了可以放在條件篩選外,我們還可以在FROM中建立一個臨時表來做查詢,該怎麼做呢?

與FROM一起使用

將查詢的結果作為另一個表的查詢來源,當我們想要預先篩選某些資料時很常用到此方法。

SELECT 欄位名1, 欄位名2, 欄位名3
FROM (SELECT 欄位名1, 欄位名2, 欄位名3
      FROM 表名
      WHERE 條件 );

同時也可以套入剛剛學到與WHERE一起使用的子查詢:

SELECT 欄位名1, 欄位名2, 欄位名3
FROM (SELECT 欄位名1, 欄位名2, 欄位名3
      FROM 表名
      WHERE 條件 )
WHERE 欄位名2 > (SELECT AVG(欄位名2)
                 FROM 表名);

哇~越寫越長!是不是越來越有成就感了?(笑)

與SELECT一起使用

最後,子查詢也一樣可以放在SELECT裡面,並傳回單值,我們來看看用法~

SELECT 欄位名1, 欄位名2, 欄位名3,(SELECT (欄位名2/欄位名3) AS A
                                 FROM 表名
                                 WHERE A > 10)
FROM 表名;

這邊與大家介紹簡單和常用的3種,希望大家可以有一個初步的認識,如果想要知道更深入的用法可以參考下方的連結!

接下來我們就會進入的Python的學習,要開始寫code啦!

既期待又緊張的燒腦環節,希望可以用輕鬆有趣的方式簡單帶大家回顧Python的基礎用法~


參考資料:

https://sdwh.dev/posts/2021/02/SQL-Server-SubQuery/

https://chriskang028.medium.com/深入淺出-sql-的子查詢-subquery-各項常用技巧-8887731717f3

https://www.mis.nsysu.edu.tw/db-book/PDF/Ch7.pdf

https://www.itread01.com/content/1562603163.html


上一篇
抓取資料庫數據 - SQL基礎語法(下)
下一篇
數據分析的好夥伴 - Python基礎:資料形式(上)
系列文
跟著文組生學數據分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言